Libraries
PREP THE DATASET FOR ANALYSIS WVS 5 & 6 ####################
#read the data (Wave 5)
clean the data set
[1] "wave" "V1A" "V1B" "country_code" "V2A" "V3" "V4"
[8] "V4_CO" "V5" "V5_CO" "V6" "V6_CO" "V7" "V7_CO"
[15] "V8" "V8_CO" "V9" "V9_CO" "V10" "V11" "V12"
[22] "V13" "V14" "V15" "V16" "V17" "V18" "V19"
[29] "V20" "V21" "V22" "V23" "V24" "V25" "V26"
[36] "V27" "V28" "V29" "V30" "V31" "V32" "V33"
[43] "V34" "V35" "V36" "V37" "V38" "V39" "V40"
[50] "V41" "V42" "V43" "V43_01" "V43_02" "V43_03" "V43_04"
[57] "V43_05" "V43_06" "V43_07" "V43_08" "V43_09" "V43_10" "V43_11"
[64] "V43_12" "V43_13" "V43_14" "V43_15" "V43_16" "V43_17" "V43_18"
[71] "V43_19" "V43_20" "V43_21" "V43_22" "V43_23" "V43_24" "V43_25"
[78] "V43_26" "V43_27" "V43_28" "V43_29" "V43_30" "V44" "V45"
[85] "V46" "V47" "V48" "V49" "V50" "V51" "V52"
[92] "V53" "V54" "married" "children" "V57" "V58" "V59"
[99] "V60" "V61" "V62" "V63" "V64" "V65" "V66"
[106] "V67" "V68" "V69" "V69_HK" "V70" "V70_HK" "V71"
[113] "V72" "V73" "V73_HK" "V74" "V74_HK" "V75" "V76"
[120] "V77" "V78" "V79" "V80" "V81" "V82" "V83"
[127] "V84" "V85" "risktaking" "V87" "V88" "V89" "V90"
[134] "V91" "V92" "V93" "V94" "V95" "V96" "V97"
[141] "V98" "V99" "V100" "V101" "V102" "V103" "V104"
[148] "V105" "V106" "V107" "V108" "V109" "V110" "V111"
[155] "V112" "V113" "V114" "V115" "V116" "V117" "V118"
[162] "V119" "V120" "V121" "V122" "V123" "V124" "V125"
[169] "V126" "V127" "V128" "V129" "V130" "V130_CA_1" "V130_IQ_1"
[176] "V130_IQ_2" "V130_IQ_3" "V130_IQ_4" "V130_NZ_1" "V130_NZ_2" "V131" "V132"
[183] "V133" "V134" "V135" "V136" "V137" "V138" "V139"
[190] "V140" "V141" "V142" "V143" "V144" "V145" "V146_00"
[197] "V146_01" "V146_02" "V146_03" "V146_04" "V146_05" "V146_06" "V146_07"
[204] "V146_08" "V146_09" "V146_10" "V146_11" "V146_12" "V146_13" "V146_14"
[211] "V146_15" "V146_16" "V146_17" "V146_18" "V146_19" "V146_20" "V146_21"
[218] "V146_22" "V147" "V148" "V149" "V150" "V151" "V151_IQ_A"
[225] "V151_IQ_B" "V152" "V153" "V154" "V155" "V156" "V157"
[232] "V158" "V159" "V160" "V161" "V162" "V163" "V164"
[239] "V165" "V166" "V167" "V168" "V169" "V170" "V171"
[246] "V172" "V173" "V174" "V175" "V176" "V177" "V178"
[253] "V179" "V180" "V181" "V182" "V183" "V184" "V185"
[260] "V186" "V187" "V188" "V189" "V190" "V191" "V192"
[267] "V193" "V194" "V195" "V196" "V197" "V198" "V199"
[274] "V200" "V201" "V202" "V203" "V204" "V205" "V206"
[281] "V207" "V208" "V209" "V210" "V211" "V212" "V213A"
[288] "V213B" "V213C" "V213D" "V213E" "V213F" "V213G" "V213H"
[295] "V213K" "V213L" "V213M" "V213N" "V214" "V215" "V216"
[302] "V217" "V218" "V219" "V220" "V221" "V222" "V223"
[309] "V224" "V225" "V226" "V227" "V228" "V229" "V230"
[316] "V231" "V232" "V233" "V233A" "V234" "gender" "V236"
[323] "age" "education" "V238CS" "V239" "V240" "employed" "V242"
[330] "V242A_CO" "V243" "V244" "V245" "V246" "V247" "V248"
[337] "V249" "V250" "V251" "V252" "V252B" "V253" "V253CS"
[344] "V254" "V255" "V255CS" "V256" "V257" "V257B" "V257C"
[351] "V258" "V259" "V259A" "V260" "V261" "V262" "V263"
[358] "V264" "V265" "S024" "S025" "Y001" "Y002" "Y003"
[365] "SACSECVAL" "SECVALWGT" "RESEMAVAL" "WEIGHTB" "I_AUTHORITY" "I_NATIONALISM" "I_DEVOUT"
[372] "DEFIANCE" "WEIGHT1A" "I_RELIGIMP" "I_RELIGBEL" "I_RELIGPRAC" "DISBELIEF" "WEIGHT2A"
[379] "I_NORM1" "I_NORM2" "I_NORM3" "RELATIVISM" "WEIGHT3A" "I_TRUSTARMY" "I_TRUSTPOLICE"
[386] "I_TRUSTCOURTS" "SCEPTICISM" "WEIGHT4A" "I_INDEP" "I_IMAGIN" "I_NONOBED" "AUTONOMY"
[393] "WEIGHT1B" "I_WOMJOB" "I_WOMPOL" "I_WOMEDU" "EQUALITY" "WEIGHT2B" "I_HOMOLIB"
[400] "I_ABORTLIB" "I_DIVORLIB" "CHOICE" "WEIGHT3B" "I_VOICE1" "I_VOICE2" "I_VOI2_00"
[407] "VOICE" "WEIGHT4B" "S001" "S007" "S018" "S019" "S021"
[414] "COW"
Read countrynames data from the CSV file (to decode the dataset
5)
Andorra Argentina Australia Brazil Bulgaria
1003 1002 1421 1500 1001
Burkina Faso Canada Chile China Colombia
1534 2164 1000 1991 3025
Cyprus (G) Egypt Ethiopia Finland France
1050 3051 1500 1014 1001
Georgia Germany Ghana Great Britain Guatemala
1500 2064 1534 1041 1000
Hong Kong Hungary India Indonesia Iran
1252 1007 2001 2015 2667
Iraq Italy Japan Jordan Malaysia
2701 1012 1096 1200 1201
Mali Mexico Moldova Morocco Netherlands
1534 1560 1046 1200 1050
New Zealand Norway Peru Poland Romania
954 1025 1500 1000 1776
Russia Rwanda Serbia and Montenegro Slovenia South Africa
2033 1507 1220 1037 2988
South Korea Spain Sweden Switzerland Taiwan
1200 1200 1003 1241 1227
Thailand Trinidad and Tobago Turkey Ukraine United States
1534 1002 1346 1000 1249
Uruguay Viet Nam Zambia
1000 1495 1500
#Read Dataset (Wave 6)
#rename variables
#decode daraset (Wave 6)
Algeria Argentina Armenia Australia Azerbaijan Belarus
1200 1030 1100 1477 1002 1535
Brazil Chile China Colombia Cyprus (G) Ecuador
1486 1000 2300 1512 1000 1202
Egypt Estonia Georgia Germany Ghana Haiti
1523 1533 1202 2046 1552 1996
Hong Kong India Iraq Japan Jordan Kazakhstan
1000 4078 1200 2443 1200 1500
Kuwait Kyrgyzstan Lebanon Libya Malaysia Mexico
1303 1500 1200 2131 1300 2000
Morocco Netherlands New Zealand Nigeria Pakistan Palestine
1200 1902 841 1759 1200 1000
Peru Philippines Poland Qatar Romania Russia
1210 1200 966 1060 1503 2500
Rwanda Singapore Slovenia South Africa South Korea Spain
1527 1972 1069 3531 1200 1189
Sweden Taiwan Thailand Trinidad and Tobago Tunisia Turkey
1206 1238 1200 999 1205 1605
Ukraine United States Uruguay Uzbekistan Yemen Zimbabwe
1500 2232 1000 1500 1000 1500
#combine the 2 dataset (Wave 6 + Wave 5)
#exclusion of participants and omission of missing data (na)
controll data
[1] 77
[1] 149626
[1] 15 99
1 2
71689 77937
create a categorical age variable (for example, to plot response
frequencies by category)
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
56 377 530 3386 3309 3734 3373 3605 3766 3639 3858 3532 3584 3500 3252 3969 3059 3302 2959 2917 3585 3073 2883 3054 2737 3600
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
2582 3114 2759 2597 3130 2570 2490 2453 2384 2990 2227 2407 2111 2140 2408 2069 2004 1909 1597 2202 1579 1764 1607 1416 1722 1352
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
1155 1239 995 1380 907 1002 896 761 782 687 590 485 395 429 337 283 264 231 212 97 71 48 49 39 16 12
93 94 95 97 98 99
14 12 6 4 4 2
15-19 20-29 30-39 40-49 50-59 60-69 70-79 80+
7658 35843 31538 27679 21862 15031 7885 2130
create a categorical education variable (with fewer categories than
the original)
incomplete or no primary education No Uni Uni
19354 70033 60239
Dichotomizing Variables: This helps estimating and interpreting the
models later on…
Control the data
[1] "Andorra" "Argentina" "Australia" "Brazil" "Bulgaria"
[6] "Burkina Faso" "Canada" "Cyprus (G)" "Chile" "China"
[11] "Egypt" "Ethiopia" "Finland" "France" "Georgia"
[16] "Germany" "Ghana" "Hungary" "India" "Indonesia"
[21] "Iran" "Japan" "Malaysia" "Mali" "Mexico"
[26] "Moldova" "Morocco" "Netherlands" "Norway" "Peru"
[31] "Poland" "Romania" "Russia" "Rwanda" "Serbia and Montenegro"
[36] "Slovenia" "South Africa" "South Korea" "Spain" "Sweden"
[41] "Switzerland" "Taiwan" "Thailand" "Trinidad and Tobago" "Turkey"
[46] "Ukraine" "United Kingdom" "Uruguay" "Viet Nam" "Zambia"
[51] "Algeria" "Armenia" "Azerbaijan" "Belarus" "Colombia"
[56] "Ecuador" "Estonia" "Haiti" "Iraq" "Jordan"
[61] "Kazakhstan" "Kuwait" "Kyrgyzstan" "Lebanon" "Libya"
[66] "New Zealand" "Nigeria" "Pakistan" "Palestine" "Philippines"
[71] "Qatar" "Singapore" "Tunisia" "United States" "Uzbekistan"
[76] "Yemen" "Zimbabwe"
PREP THE DATASET FOR ANALYSIS HARDSHIP ####################
read in file that contains hardship indicators manually collected
from CIA factbook, WHO, and World Bank
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[22] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[43] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[64] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Control the data
[1] 7.57837
[1] 24858.98
[1] 75.72305
Plot histogram of all hardship indicators

Control the data
[1] 1.381603
[1] 9.673686
[1] 4.323732
tibble [105 × 9] (S3: tbl_df/tbl/data.frame)
$ code : chr [1:105] "AFG" "DZA" "ADO" "ARG" ...
$ country : chr [1:105] "Afghanistan" "Algeria" "Andorra" "Argentina" ...
$ codeWVS : num [1:105] 4 12 20 32 51 36 40 31 50 112 ...
$ Homicide : num [1:105] 2.203 0.323 0.956 1.72 1.45 ...
$ GDP : num [1:105] 7.31 9.31 10.82 9.98 9.56 ...
$ InfMort : num [1:105] 4.635 2.956 0.956 2.213 2.476 ...
$ LifeExp : num [1:105] 3.99 4.36 4.43 4.36 4.34 ...
$ GINI : num [1:105] 29.4 27.6 27.2 42.3 25.2 34.3 30.2 33.7 32.4 24.4 ...
$ GenderPEdu: num [1:105] 2.62 4.57 4.57 4.57 4.51 ...
tibble [105 × 9] (S3: tbl_df/tbl/data.frame)
$ code : chr [1:105] "AFG" "DZA" "ADO" "ARG" ...
$ country : chr [1:105] "Afghanistan" "Algeria" "Andorra" "Argentina" ...
$ codeWVS : num [1:105] 4 12 20 32 51 36 40 31 50 112 ...
$ Homicide : num [1:105] 2.203 0.323 0.956 1.72 1.45 ...
$ GDP : num [1:105] 7.31 9.31 10.82 9.98 9.56 ...
$ InfMort : num [1:105] 4.635 2.956 0.956 2.213 2.476 ...
$ LifeExp : num [1:105] 3.99 4.36 4.43 4.36 4.34 ...
$ GINI : num [1:105] 29.4 27.6 27.2 42.3 25.2 34.3 30.2 33.7 32.4 24.4 ...
$ GenderPEdu: num [1:105] 2.62 4.57 4.57 4.57 4.51 ...
changing variables into the same direction
Error in median.default(countryfacts[, counter], na.rm = TRUE) :
need numeric data
Create the ‘hardship’ column in the ‘hardship’ data frame
Control the data
SUP MATERIALS:Correlation between hardship indicators
Cronbach’s Alpha for Hardship Indicators
Merge the data matrix with the countryfacts dataset based on the
country code
#Transformation of item risktaking
Risktaking as ordinal variable
Transform risk variable into T-score (mean = 50, sd = 10)
Mixed-model WVS - Replication of Mata et al., 2016
intercept only model
age, sex
Summary model1
age, sex, and covariates (children, marital status, employement
status, education)
Summary model2
Summary model3
ANOVA
Delete when submitting the code –> just for me to know where the
document is
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CnJtKGxpc3QgPSBscygpKQpgYGAKCgojIExpYnJhcmllcwpgYGB7cn0KbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoaGF2ZW4pCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeSh3b3JkY2xvdWQpCmxpYnJhcnkobG1lNCkKbGlicmFyeShsbWVyVGVzdCkKbGlicmFyeShyZXNoYXBlMikKbGlicmFyeShwYXRjaHdvcmspCmxpYnJhcnkocHN5Y2gpCmBgYAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMKUFJFUCBUSEUgREFUQVNFVCBGT1IgQU5BTFlTSVMgV1ZTIDUgJiA2CiMjIyMjIyMjIyMjIyMjIyMjIyMjCgojcmVhZCB0aGUgZGF0YSAoV2F2ZSA1KQpgYGB7cn0KIyBEYXRhIG9mIFdhdmUgNQpXVjVfZGF0YSA8LSByZWFkUkRTKCIvVXNlcnMvbGF1cmFiYXp6aWdoZXIvRG9jdW1lbnRzL0dpdEh1Yi9yaXNrX3d2cy9kYXRhL2RhdGFzZXQvV1Y2X2RhdGFzZXRfd2F2ZV81XzYvRjAwMDA3OTQ0LVdWNV9EYXRhX1JfdjIwMTgwOTEyLnJkcyIpCgojIENvbnZlcnQgV1Y1X2RhdGEtb2JqZWN0IGluIGRhdGEuZnJhbWUgCldWNV9kYXRhX2RmIDwtIGFzLmRhdGEuZnJhbWUoV1Y1X2RhdGEpCgojIHNob3cgZmlyc3QgZml2ZSBjb2x1bW5zCldWNV9kYXRhX2RmCmBgYAoKIyBjbGVhbiB0aGUgZGF0YSBzZXQKYGBge3J9CiNyZW5hbWUgdGhlIHZhcmlhYmxlcwpXVjVfZGF0YSA8LSBXVjVfZGF0YV9kZiAlPiUKICByZW5hbWUoZ2VuZGVyID0gVjIzNSwgYWdlID0gVjIzNywgY291bnRyeV9jb2RlID0gVjIsIHdhdmUgPSBWMSwgcmlza3Rha2luZyA9IFY4NiwgY2hpbGRyZW4gPSBWNTYsIG1hcnJpZWQgPSBWNTUsIGVtcGxveWVkID0gVjI0MSwgZWR1Y2F0aW9uID0gVjIzOCkKV1Y1X2RhdGEKCmNvbG5hbWVzKFdWNV9kYXRhKQoKI3NlbGVjdCBvbmx5IHRoZSB2YXJpYWJsZXMgb2YgaW50ZXJlc3QKV1Y1X2RhdGEgPC0gV1Y1X2RhdGEgJT4lCiAgZHBseXI6OnNlbGVjdChnZW5kZXIsIGFnZSwgY291bnRyeV9jb2RlLCB3YXZlLCByaXNrdGFraW5nLCBjaGlsZHJlbiwgZW1wbG95ZWQsIGVkdWNhdGlvbiwgbWFycmllZCkKV1Y1X2RhdGEKYGBgCiMgUmVhZCBjb3VudHJ5bmFtZXMgZGF0YSBmcm9tIHRoZSBDU1YgZmlsZSAodG8gZGVjb2RlIHRoZSBkYXRhc2V0IDUpCmBgYHtyfQpjb3VudHJ5bmFtZXMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9sYXVyYWJhenppZ2hlci9Eb2N1bWVudHMvR2l0SHViL3Jpc2tfd3ZzL2RhdGEvZGF0YXNldC9XVjZfZGF0YXNldF93YXZlXzVfNi9jb3VudHJ5bmFtZXMudHh0IiwgaGVhZGVyID0gRkFMU0UsIGFzLmlzID0gVFJVRSkKY29sbmFtZXMoY291bnRyeW5hbWVzKSA8LSBjKCJjb2RlIiwgIm5hbWUiKQoKIyBBc3N1bWluZyBXVjVfZGF0YSBoYXMgYSBjb2x1bW4gbmFtZWQgY291bnRyeV9jb2RlCldWNV9kYXRhJGNvdW50cnkgPC0gY291bnRyeW5hbWVzJG5hbWVbbWF0Y2goV1Y1X2RhdGEkY291bnRyeV9jb2RlLCBjb3VudHJ5bmFtZXMkY29kZSldCgojIENoZWNrIHRoZSBmcmVxdWVuY3kgb2YgZWFjaCBjb3VudHJ5IGluIHRoZSBuZXcgY29sdW1uCnRhYmxlKFdWNV9kYXRhJGNvdW50cnkpCgojIERpc3BsYXkgdGhlIHVwZGF0ZWQgV1Y1X2RhdGEKcHJpbnQoV1Y1X2RhdGEpCmBgYAoKI1JlYWQgRGF0YXNldCAoV2F2ZSA2KQpgYGB7cn0KbG9hZCgiL1VzZXJzL2xhdXJhYmF6emlnaGVyL0RvY3VtZW50cy9HaXRIdWIvcmlza193dnMvZGF0YS9kYXRhc2V0L1dWNl9kYXRhc2V0X3dhdmVfNV82L1dWNl9EYXRhX1JfdjIwMjAxMTE3LnJkYXRhIikgCldWNl9kYXRhIDwtIFdWNl9EYXRhX1JfdjIwMjAxMTE3IAoKcHJpbnQoV1Y2X2RhdGEpCmBgYAojcmVuYW1lIHZhcmlhYmxlcwpgYGB7cn0KV1Y2X2RhdGEgPC0gV1Y2X2RhdGEgJT4lCiAgcmVuYW1lKHdhdmUgPSBWMSwgZ2VuZGVyID0gVjI0MCwgYWdlID0gVjI0Mixjb3VudHJ5X2NvZGUgPSBWMiwgcmlza3Rha2luZyA9IFY3NiwgY2hpbGRyZW4gPSBWNTgsIG1hcnJpZWQgPSBWNTcsIGVtcGxveWVkID0gVjIyOSwgZWR1Y2F0aW9uID0gVjI0OCkKCiNzZWxlY3Qgb25seSB0aGUgdmFyaWFibGVzIG9mIGludGVyZXN0CldWNl9kYXRhIDwtIFdWNl9kYXRhICU+JQogIGRwbHlyOjpzZWxlY3QoZ2VuZGVyLCBhZ2UsIGNvdW50cnlfY29kZSwgd2F2ZSwgcmlza3Rha2luZywgY2hpbGRyZW4sIGVtcGxveWVkLCBlZHVjYXRpb24sIG1hcnJpZWQpCldWNl9kYXRhCmBgYAojZGVjb2RlIGRhcmFzZXQgKFdhdmUgNikKYGBge3J9CmNvdW50cnluYW1lcyA9IHJlYWQuY3N2KCIvVXNlcnMvbGF1cmFiYXp6aWdoZXIvRG9jdW1lbnRzL0dpdEh1Yi9yaXNrX3d2cy9kYXRhL2RhdGFzZXQvV1Y2X2RhdGFzZXRfd2F2ZV81XzYvY291bnRyeW5hbWVzLnR4dCIsIGhlYWRlcj1GQUxTRSxhcy5pcz1UUlVFKQpjb2xuYW1lcyhjb3VudHJ5bmFtZXMpID0gYygiY29kZSIsICJuYW1lIikKV1Y2X2RhdGEkY291bnRyeSA9IGNvdW50cnluYW1lcyRuYW1lIFttYXRjaChXVjZfZGF0YSRjb3VudHJ5X2NvZGUsIGNvdW50cnluYW1lcyRjb2RlKV0KdGFibGUoV1Y2X2RhdGEkY291bnRyeSkKV1Y2X2RhdGEKYGBgCgojY29tYmluZSB0aGUgMiBkYXRhc2V0IChXYXZlIDYgKyBXYXZlIDUpCmBgYHtyfQpXVlNfZGF0YSA9IHJiaW5kKFdWNV9kYXRhLCBXVjZfZGF0YSkKV1ZTX2RhdGEKYGBgCgojZXhjbHVzaW9uIG9mIHBhcnRpY2lwYW50cyBhbmQgb21pc3Npb24gb2YgbWlzc2luZyBkYXRhIChuYSkKYGBge3J9CldWU19kYXRhID0gc3Vic2V0KFdWU19kYXRhLCByaXNrdGFraW5nID4gMCAmIGdlbmRlciA+IDAgJiBhZ2UgPjAgJiBlZHVjYXRpb24gPiAwICYgZW1wbG95ZWQgPiAwICYgbWFycmllZCA+IDAgJiBjaGlsZHJlbiA+PSAwKQojIyMgV1ZTX2RhdGEgPC0gbmEub21pdChXVlNfZGF0YSkgIyMjIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgaXMgbm90IGluIGNvZGUgZnJvbSBNYXRhIGV0IGFsLiwgMjAxNgoKIyBVc2UgdGhlIG11dGF0ZSBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIGNvdW50cnkgbmFtZQpXVlNfZGF0YSA8LSBXVlNfZGF0YSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGlmZWxzZShjb3VudHJ5ID09ICJHcmVhdCBCcml0YWluIiwgIlVuaXRlZCBLaW5nZG9tIiwgY291bnRyeSkpCmBgYAoKYGBge3J9CmhlYWQoV1ZTX2RhdGEpCmBgYAoKIyBjb250cm9sbCBkYXRhCmBgYHtyfQpsZW5ndGgodW5pcXVlKFdWU19kYXRhJGNvdW50cnkpKSAKbnJvdyhXVlNfZGF0YSkgIyBudW1iZXIgb2YgaW5kaXZpZHVhbHMgCnJhbmdlKFdWU19kYXRhJGFnZSwgbmEucm09VFJVRSkgCnRhYmxlKFdWU19kYXRhJGdlbmRlcikgIyBzZXggdGFibGUoZGF0YSRzZXgpL25yb3coZGF0YSkgCmBgYAoKIyBjcmVhdGUgYSBjYXRlZ29yaWNhbCBhZ2UgdmFyaWFibGUgKGZvciBleGFtcGxlLCB0byBwbG90IHJlc3BvbnNlIGZyZXF1ZW5jaWVzIGJ5IGNhdGVnb3J5KQpgYGB7cn0KV1ZTX2RhdGEkYWdlY2F0W1dWU19kYXRhJGFnZTwyMF09IjE1LTE5IgpXVlNfZGF0YSRhZ2VjYXRbV1ZTX2RhdGEkYWdlPj0yMCAmIFdWU19kYXRhJGFnZSA8MzBdID0gIjIwLTI5IgpXVlNfZGF0YSRhZ2VjYXRbV1ZTX2RhdGEkYWdlPj0zMCAmIFdWU19kYXRhJGFnZSA8NDBdID0gIjMwLTM5IgpXVlNfZGF0YSRhZ2VjYXRbV1ZTX2RhdGEkYWdlPj00MCAmIFdWU19kYXRhJGFnZSA8NTBdID0gIjQwLTQ5IgpXVlNfZGF0YSRhZ2VjYXRbV1ZTX2RhdGEkYWdlPj01MCAmIFdWU19kYXRhJGFnZSA8NjBdID0gIjUwLTU5IgpXVlNfZGF0YSRhZ2VjYXRbV1ZTX2RhdGEkYWdlPj02MCAmIFdWU19kYXRhJGFnZSA8NzBdID0gIjYwLTY5IgpXVlNfZGF0YSRhZ2VjYXRbV1ZTX2RhdGEkYWdlPj03MCAmIFdWU19kYXRhJGFnZSA8ODBdID0gIjcwLTc5IgpXVlNfZGF0YSRhZ2VjYXRbV1ZTX2RhdGEkYWdlPj04MF0gPSAiODArIgoKdGFibGUoV1ZTX2RhdGEkYWdlKQp0YWJsZShXVlNfZGF0YSRhZ2VjYXQpCmBgYAoKIyBjcmVhdGUgYSBjYXRlZ29yaWNhbCBlZHVjYXRpb24gdmFyaWFibGUgKHdpdGggZmV3ZXIgY2F0ZWdvcmllcyB0aGFuIHRoZSBvcmlnaW5hbCkKYGBge3J9CiMgTmV1ZSBTcGFsdGUgJ2VkdWNhdGlvbl9jYXQnIGVyc3RlbGxlbiB1bmQgaW5pdGlhbGlzaWVyZW4KV1ZTX2RhdGEkZWR1Y2F0aW9uX2NhdCA8LSBOQQoKIyBLYXRlZ29yaWVuIHp1d2Vpc2VuIGJhc2llcmVuZCBhdWYgZGVuIEJpbGR1bmdzc3R1ZmVuCldWU19kYXRhJGVkdWNhdGlvbl9jYXQgPC0gaWZlbHNlKFdWU19kYXRhJGVkdWNhdGlvbiAlaW4lIGMoMSwgMiksICJpbmNvbXBsZXRlIG9yIG5vIHByaW1hcnkgZWR1Y2F0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFdWU19kYXRhJGVkdWNhdGlvbiAlaW4lIGMoMywgNCwgNSwgNiksICJObyBVbmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShXVlNfZGF0YSRlZHVjYXRpb24gJWluJSBjKDcsIDgsIDkpLCAiVW5pIiwgTkEpKSkKCiMgVGFiZWxsZSBkZXIgbmV1ZW4gS2F0ZWdvcmllbiBhbnplaWdlbgp0YWJsZShXVlNfZGF0YSRlZHVjYXRpb25fY2F0KQpgYGAKCiMgRGljaG90b21pemluZyBWYXJpYWJsZXM6IFRoaXMgaGVscHMgZXN0aW1hdGluZyBhbmQgaW50ZXJwcmV0aW5nIHRoZSBtb2RlbHMgbGF0ZXIgb24uLi4KYGBge3J9CldWU19kYXRhJGdlbmRlciA9IGlmZWxzZShXVlNfZGF0YSRnZW5kZXIgPT0gMSwgMCwgMSkgIyBzZXg6IG1hbGUgdnMuIGZlbWFsZQpXVlNfZGF0YSRjaGlsZHJlbiA9IGlmZWxzZShXVlNfZGF0YSRjaGlsZHJlbiA9PSAwLCAwLCAxKSAjIGNoaWxkcmVuOiBubyB2cy4geWVzCldWU19kYXRhJG1hcnJpZWQgPSBpZmVsc2UoV1ZTX2RhdGEkbWFycmllZCA9PSAxLCAxLCAwKSAjIG1hcnJpZWQ6IHllcyB2cy4gbm8KV1ZTX2RhdGEkZW1wbG95ZWQgPSBpZmVsc2UoV1ZTX2RhdGEkZW1wbG95ZWQgPCA0LCAxLCAwKSAjIGVtcGxveWVkOiB5ZXMgdnMuIG5vCldWU19kYXRhJGVkdWNhdGlvbiA9IGlmZWxzZShXVlNfZGF0YSRlZHVjYXRpb24gPCA0LCAwLCAxKSAjIGVkdWNhdGlvbjogbm8gcHJpbWFyeSB2cy4gcHJpbWFyeSsgCmhlYWQoV1ZTX2RhdGEpCmBgYAoKIyBDb250cm9sIHRoZSBkYXRhCmBgYHtyfQpjb3VudHJpZXNfbGlzdCA8LSB1bmlxdWUoV1ZTX2RhdGEkY291bnRyeSkKY291bnRyaWVzX2xpc3QKCmBgYAoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjClBSRVAgVEhFIERBVEFTRVQgRk9SIEFOQUxZU0lTIEhBUkRTSElQCiMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIHJlYWQgaW4gZmlsZSB0aGF0IGNvbnRhaW5zIGhhcmRzaGlwIGluZGljYXRvcnMgbWFudWFsbHkgY29sbGVjdGVkIGZyb20gQ0lBIGZhY3Rib29rLCBXSE8sIGFuZCBXb3JsZCBCYW5rIApgYGB7cn0KbGlicmFyeShyZWFkeGwpCgpleGNlbF9wYXRoIDwtICIvVXNlcnMvbGF1cmFiYXp6aWdoZXIvRG9jdW1lbnRzL0dpdEh1Yi9yaXNrX3d2cy9kYXRhL2RhdGFzZXQvSGFyZHNoaXAvSGFyZHNoaXBfY29tcGxldGVfMjAyNC54bHN4Igpjb3VudHJ5ZmFjdHMgPC0gcmVhZF9leGNlbChleGNlbF9wYXRoKQoKbGFiZWxzIDwtIGMoImNvZGUiLCAiY291bnRyeSIsICJjb2RlV1ZTIiwgIkhvbWljaWRlIiwgIkdEUCIsICJJbmZNb3J0IiwgIkxpZmVFeHAiLCAiR0lOSSIsICJHZW5kZXJQRWR1IikKbmFtZXMoY291bnRyeWZhY3RzKSA8LSBsYWJlbHMKCnVuaXF1ZShXVlNfZGF0YSRjb3VudHJ5KSAlaW4lIGNvdW50cnlmYWN0cyRjb2RlV1ZTICMgY2hlY2sgdGhhdCBhbGwgY291bnRyaWVzIGluIHRoZSBzdWJzZXQgb2YgdGhlIFdWUyBkYXRhIGFyZSBpbmNsdWRlZCBpbiB0aGUgY291bnRyeWZhY3RzIGZpbGUKCiMjIyMjIEhhaXRpIGlzIG5vdCBpbiB0aGUgY291bnRyeWZhY3RzIGxpc3QgIyMjIyMgCmNvdW50cnlmYWN0cwpXVlNfZGF0YQpgYGAKCiMgQ29udHJvbCB0aGUgZGF0YQpgYGB7cn0KbWVhbihjb3VudHJ5ZmFjdHMkSG9taWNpZGUsIG5hLnJtID0gVFJVRSkKbWVhbihjb3VudHJ5ZmFjdHMkR0RQLCBuYS5ybSA9IFRSVUUpCm1lYW4oY291bnRyeWZhY3RzJExpZmVFeHAsIG5hLnJtID0gVFJVRSkKYGBgCgojIFBsb3QgaGlzdG9ncmFtIG9mIGFsbCBoYXJkc2hpcCBpbmRpY2F0b3JzCmBgYHtyfQojIFBsb3QgaGlzdG9ncmFtIG9mIGFsbCBoYXJkc2hpcCBpbmRpY2F0b3JzCmNvbWJpbmVkX3Bsb3QgPC0gTlVMTCAjIExlZXJlcyBQbG90LU9iamVrdCBlcnN0ZWxsZW4KCiMgRGVmaW5lIHRoZSB2ZWN0b3Igb2YgbGFiZWxzIGZvciB0aGUgaXRlbXMKaXRlbXMgPC0gYygiSG9taWNpZGUiLCJHRFAiLCJJbmZNb3J0IiwiTGlmZUV4cCIsIkdJTkkiLCJHZW5kZXJQRWR1IikKCiMgTG9vcCBkdXJjaCBqZWRlcyBJdGVtIHVuZCBmw7xnZSBkYXMgSGlzdG9ncmFtbSB6dW0ga29tYmluaWVydGVuIFBsb3QgaGluenUKZm9yIChpdGVtIGluIGl0ZW1zKSB7CiAgIyBFcnN0ZWxsZSBlaW4gSGlzdG9ncmFtbSBmw7xyIGRhcyBha3R1ZWxsZSBJdGVtCiAgcGxvdCA8LSBnZ3Bsb3QoY291bnRyeWZhY3RzLCBhZXNfc3RyaW5nKHggPSBpdGVtKSkgKwogICAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxLCBmaWxsID0gInNreWJsdWUiLCBjb2xvciA9ICJibGFjayIpICsKICAgIGxhYnModGl0bGUgPSBwYXN0ZShpdGVtKSwKICAgICAgICAgeCA9IGl0ZW0sCiAgICAgICAgIHkgPSAiRnJlcXVlbmN5IikgKwogICAgdGhlbWVfbWluaW1hbCgpCiAgCiAgIyBGw7xnZSBkYXMgSGlzdG9ncmFtbSB6dW0ga29tYmluaWVydGVuIFBsb3QgaGluenUKICBpZiAoaXMubnVsbChjb21iaW5lZF9wbG90KSkgewogICAgY29tYmluZWRfcGxvdCA8LSBwbG90CiAgfSBlbHNlIHsKICAgIGNvbWJpbmVkX3Bsb3QgPC0gY29tYmluZWRfcGxvdCArIHBsb3QKICB9Cn0KCiMgWmVpZ2UgZGVuIGtvbWJpbmllcnRlbiBQbG90IGFuCmNvbWJpbmVkX3Bsb3QKYGBgCgoKIyBsb2cgdHJhbnNmb3JtCmBgYHtyfQpjb3VudHJ5ZmFjdHMkSG9taWNpZGU9bG9nKGNvdW50cnlmYWN0cyRIb21pY2lkZSkKY291bnRyeWZhY3RzJEdEUD1sb2coY291bnRyeWZhY3RzJEdEUCkKY291bnRyeWZhY3RzJEluZk1vcnQ9bG9nKGNvdW50cnlmYWN0cyRJbmZNb3J0KQpjb3VudHJ5ZmFjdHMkTGlmZUV4cD1sb2coY291bnRyeWZhY3RzJExpZmVFeHApCiNjb3VudHJ5ZmFjdHMkR0lOST1sb2coY291bnRyeWZhY3RzJEdJTkkpICMgbm90IHRyYW5zZm9ybWVkCmNvdW50cnlmYWN0cyRHZW5kZXJQRWR1PWxvZyhjb3VudHJ5ZmFjdHMkR2VuZGVyUEVkdSkKCmNvdW50cnlmYWN0cwpgYGAKCiMgQ29udHJvbCB0aGUgZGF0YQpgYGB7cn0KbWVhbihjb3VudHJ5ZmFjdHMkSG9taWNpZGUsIG5hLnJtID0gVFJVRSkKbWVhbihjb3VudHJ5ZmFjdHMkR0RQLCBuYS5ybSA9IFRSVUUpCm1lYW4oY291bnRyeWZhY3RzJExpZmVFeHAsIG5hLnJtID0gVFJVRSkKYGBgCmBgYHtyfQojIFJlbW92ZSB1bm5lY2Vzc2FyeSBhdHRyaWJ1dGVzIGZyb20gc2NhbGVkIGNvbHVtbnMKYXR0cmlidXRlcyhjb3VudHJ5ZmFjdHMkSG9taWNpZGUpIDwtIE5VTEwKYXR0cmlidXRlcyhjb3VudHJ5ZmFjdHMkR0RQKSA8LSBOVUxMCmF0dHJpYnV0ZXMoY291bnRyeWZhY3RzJEluZk1vcnQpIDwtIE5VTEwKYXR0cmlidXRlcyhjb3VudHJ5ZmFjdHMkTGlmZUV4cCkgPC0gTlVMTAphdHRyaWJ1dGVzKGNvdW50cnlmYWN0cyRHSU5JKSA8LSBOVUxMCmF0dHJpYnV0ZXMoY291bnRyeWZhY3RzJEdlbmRlclBFZHUpIDwtIE5VTEwKCiMgQ2hlY2sgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBhZ2FpbgpzdHIoY291bnRyeWZhY3RzKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQoKIyBDb2VyY2UgbnVtZXJpYyBjb2x1bW5zIHRvIG51bWVyaWMgZXhwbGljaXRseQpjb3VudHJ5ZmFjdHMgPC0gY291bnRyeWZhY3RzICU+JQogIG11dGF0ZV9hdCh2YXJzKEhvbWljaWRlLCBHRFAsIEluZk1vcnQsIExpZmVFeHAsIEdJTkksIEdlbmRlclBFZHUpLCBhcy5udW1lcmljKQoKIyBDaGVjayB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhZnJhbWUKc3RyKGNvdW50cnlmYWN0cykKYGBgCgpgYGB7cn0KIyBDb252ZXJ0IEhvbWljaWRlIGNvbHVtbiB0byBudW1lcmljCmNvdW50cnlmYWN0cyRIb21pY2lkZSA8LSBhcy5udW1lcmljKGNvdW50cnlmYWN0cyRIb21pY2lkZSkKY291bnRyeWZhY3RzJEdEUCA8LSBhcy5udW1lcmljKGNvdW50cnlmYWN0cyRHRFApCmNvdW50cnlmYWN0cyRJbmZNb3J0IDwtIGFzLm51bWVyaWMoY291bnRyeWZhY3RzJEluZk1vcnQpCmNvdW50cnlmYWN0cyRMaWZlRXhwIDwtIGFzLm51bWVyaWMoY291bnRyeWZhY3RzJExpZmVFeHApCmNvdW50cnlmYWN0cyRHSU5JIDwtIGFzLm51bWVyaWMoY291bnRyeWZhY3RzJEdJTkkpCmNvdW50cnlmYWN0cyRHZW5kZXJQRWR1IDwtIGFzLm51bWVyaWMoY291bnRyeWZhY3RzJEdlbmRlclBFZHUpCmBgYAoKCiMgY2hhbmdpbmcgdmFyaWFibGVzIGludG8gdGhlIHNhbWUgZGlyZWN0aW9uCmBgYHtyfQojIFJldmVyc2UgQ29kaWVydW5nCmNvdW50cnlmYWN0cyRIb21pY2lkZT1zY2FsZShjb3VudHJ5ZmFjdHMkSG9taWNpZGUpCmNvdW50cnlmYWN0cyRHRFA9c2NhbGUoLWNvdW50cnlmYWN0cyRHRFApCmNvdW50cnlmYWN0cyRJbmZNb3J0PXNjYWxlKGNvdW50cnlmYWN0cyRJbmZNb3J0KQpjb3VudHJ5ZmFjdHMkTGlmZUV4cD1zY2FsZSgtY291bnRyeWZhY3RzJExpZmVFeHApCmNvdW50cnlmYWN0cyRHSU5JPXNjYWxlKGNvdW50cnlmYWN0cyRHSU5JKQpjb3VudHJ5ZmFjdHMkR2VuZGVyUEVkdT1zY2FsZSgtY291bnRyeWZhY3RzJEdlbmRlclBFZHUpCgpjb3VudHJ5ZmFjdHMKIyBJTVBVVEUgaGFyZHNoaXAgaW5kaWNhdG9ycyB3LyBtZWRpYW4KZm9yIChjb3VudGVyIGluIDQ6OSkKewogIGNvdW50cnlmYWN0c1tpcy5uYShjb3VudHJ5ZmFjdHNbLGNvdW50ZXJdKSxjb3VudGVyXT1tZWRpYW4oY291bnRyeWZhY3RzWyxjb3VudGVyXSxuYS5ybT1UUlVFKQp9CmNvdW50cnlmYWN0cwpgYGAKCgoKCiMgQ3JlYXRlIHRoZSAnaGFyZHNoaXAnIGNvbHVtbiBpbiB0aGUgJ2hhcmRzaGlwJyBkYXRhIGZyYW1lCmBgYHtyfQpjb3VudHJ5ZmFjdHMkaGFyZHNoaXAgPC0gcm93TWVhbnMoY291bnRyeWZhY3RzWywgYygiSG9taWNpZGUiLCAiR0RQIiwgIkdJTkkiLCAiTGlmZUV4cCIsICJJbmZNb3J0IiwgIkdlbmRlclBFZHUiKV0sIG5hLnJtID0gVFJVRSkKCmNvdW50cnlmYWN0cwpgYGAKCgojIENvbnRyb2wgdGhlIGRhdGEKYGBge3J9Cm1lYW4oY291bnRyeWZhY3RzJEhvbWljaWRlLCBuYS5ybSA9IFRSVUUpCm1lYW4oY291bnRyeWZhY3RzJEdEUCwgbmEucm0gPSBUUlVFKQptZWFuKGNvdW50cnlmYWN0cyRMaWZlRXhwLCBuYS5ybSA9IFRSVUUpCmBgYAoKIyBQbG90IGhpc3RvZ3JhbSBvZiBhbGwgaGFyZHNoaXAgaW5kaWNhdG9ycyBhZnRlciBsb2cgdHJhbnNmb3JtCmBgYHtyfQojIFBsb3QgaGlzdG9ncmFtIG9mIGFsbCBoYXJkc2hpcCBpbmRpY2F0b3JzIGFmdGVyIGxvZyB0cmFuc2Zvcm0KIyBMZWVyZXMgUGxvdC1PYmpla3QgZXJzdGVsbGVuCmNvbWJpbmVkX3Bsb3QgPC0gTlVMTAoKIyBEZWZpbmUgdGhlIHZlY3RvciBvZiBsYWJlbHMgZm9yIHRoZSBpdGVtcwppdGVtcyA8LSBjKCJIb21pY2lkZSIsICJHRFAiLCAiR0lOSSIsICJMaWZlRXhwIiwgIkluZk1vcnQiLCAiR2VuZGVyUEVkdSIsICJoYXJkc2hpcCIpCgojIExvb3AgZHVyY2ggamVkZXMgSXRlbSB1bmQgZsO8Z2UgZGFzIEhpc3RvZ3JhbW0genVtIGtvbWJpbmllcnRlbiBQbG90IGhpbnp1CmZvciAoaXRlbSBpbiBpdGVtcykgewogICMgRXJzdGVsbGUgZWluIEhpc3RvZ3JhbW0gZsO8ciBkYXMgYWt0dWVsbGUgSXRlbQogIHBsb3QgPC0gZ2dwbG90KGNvdW50cnlmYWN0cywgYWVzX3N0cmluZyh4ID0gaXRlbSkpICsKICAgIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMSwgZmlsbCA9ICJza3libHVlIiwgY29sb3IgPSAiYmxhY2siKSArCiAgICBsYWJzKHRpdGxlID0gcGFzdGUoaXRlbSksCiAgICAgICAgIHggPSBpdGVtLAogICAgICAgICB5ID0gIkZyZXF1ZW5jeSIpICsKICAgIHRoZW1lX21pbmltYWwoKQogIAogICMgRsO8Z2UgZGFzIEhpc3RvZ3JhbW0genVtIGtvbWJpbmllcnRlbiBQbG90IGhpbnp1CiAgaWYgKGlzLm51bGwoY29tYmluZWRfcGxvdCkpIHsKICAgIGNvbWJpbmVkX3Bsb3QgPC0gcGxvdAogIH0gZWxzZSB7CiAgICBjb21iaW5lZF9wbG90IDwtIGNvbWJpbmVkX3Bsb3QgKyBwbG90CiAgfQp9CgojIFplaWdlIGRlbiBrb21iaW5pZXJ0ZW4gUGxvdCBhbgpjb21iaW5lZF9wbG90CmBgYAoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTVVAgTUFURVJJQUxTOkNvcnJlbGF0aW9uIGJldHdlZW4gaGFyZHNoaXAgaW5kaWNhdG9ycyAKYGBge3J9CnBhbmVsLmNvciA9IGZ1bmN0aW9uKHgsIHksIGRpZ2l0cyA9IDIsIC4uLikKewogIHVzciA9IHBhcigidXNyIik7IG9uLmV4aXQocGFyKHVzcikpCiAgcGFyKHVzciA9IGMoMCwgMSwgMCwgMSkpCiAgIyBjb3JyZWxhdGlvbiBjb2VmZmljaWVudAogIHIgPSBjb3IoeCwgeSx1c2U9ImNvbXBsZXRlLm9icyIpCiAgdHh0ID0gZm9ybWF0KGMociwgMC4xMjM0NTY3ODkpLCBkaWdpdHMgPSBkaWdpdHMpWzFdCiAgdHh0ID0gcGFzdGUoInI9ICIsIHR4dCwgc2VwID0gIiIpCiAgdGV4dCgwLjUsIDAuNiwgdHh0KQogIAogICMgcC12YWx1ZSBjYWxjdWxhdGlvbgogIHAgPSBjb3IudGVzdCh4LCB5LHVzZT0iY29tcGxldGUub2JzIikkcC52YWx1ZQogIHR4dDIgPSBmb3JtYXQoYyhwLCAwLjEyMzQ1Njc4OSksIGRpZ2l0cyA9IGRpZ2l0cylbMV0KICB0eHQyID0gcGFzdGUoInA9ICIsIHR4dDIsIHNlcCA9ICIiKQogIGlmKHA8MC4wMSkgdHh0MiA9IHBhc3RlKCJwICIsICI8MC4wMSIsIHNlcCA9ICIiKQogIHRleHQoMC41LCAwLjQsIHR4dDIpCn0KcGFpcnMoY291bnRyeWZhY3RzWyw0OjEwXSwgdXBwZXIucGFuZWwgPSBwYW5lbC5jb3IsbGFzPTEsY2V4LmxhYmVscz0uOSkgCmRldi5wcmludChwb3N0c2NyaXB0LCJzY2F0dGVyX2luZGljYXRvcnMuZXBzIix3aWR0aD04LCBoZWlnaHQ9OCxob3Jpem9udGFsPUZBTFNFLG9uZWZpbGU9RkFMU0UpCmBgYAoKIyBDcm9uYmFjaCdzIEFscGhhIGZvciBIYXJkc2hpcCBJbmRpY2F0b3JzCmBgYHtyfQpsaWJyYXJ5KHBzeWNoKQoKIyBTdWJzZXQgZGVyIEhhcmRzaGlwLUluZGlrYXRvcmVuIGF1cyBkZW0gY291bnRyeWZhY3RzLURhdGVuc2F0eiBhdXN3w6RobGVuCmhhcmRzaGlwX3N1YnNldCA8LSBjb3VudHJ5ZmFjdHNbLCBjKCJIb21pY2lkZSIsICJHRFAiLCAiSW5mTW9ydCIsICJMaWZlRXhwIiwgIkdJTkkiLCAiR2VuZGVyUEVkdSIpXQoKIyBDcm9uYmFjaCdzIEFscGhhIGJlcmVjaG5lbgphbHBoYV9yZXN1bHQgPC0gYWxwaGEoaGFyZHNoaXBfc3Vic2V0KQphbHBoYV9yZXN1bHQKYGBgCgpgYGB7cn0KIyBFcnNldHplbiBTaWUgIlVTQSIgZHVyY2ggIlVuaXRlZCBTdGF0ZXMiIGltIGNvdW50cnlmYWN0cy1EYXRlbnNhdHoKY291bnRyeWZhY3RzJGNvdW50cnlbY291bnRyeWZhY3RzJGNvdW50cnkgPT0gIlVTQSJdIDwtICJVbml0ZWQgU3RhdGVzIgpgYGAKCiMgTWVyZ2UgdGhlIGRhdGEgbWF0cml4IHdpdGggdGhlIGNvdW50cnlmYWN0cyBkYXRhc2V0IGJhc2VkIG9uIHRoZSBjb3VudHJ5IGNvZGUKYGBge3J9CiMgWnVzYW1tZW5mw7xocmVuIGRlciAnaGFyZHNoaXAnLVZhcmlhYmxlIHZvbiBjb3VudHJ5ZmFjdHMgbWl0IFdWU19kYXRhIGJhc2llcmVuZCBhdWYgZGVtIEzDpG5kZXJuYW1lbgpXVlNfZGF0YSA8LSBtZXJnZShXVlNfZGF0YSwgY291bnRyeWZhY3RzWywgYygiY291bnRyeSIsICJoYXJkc2hpcCIpXSwgYnkgPSAiY291bnRyeSIsIGFsbC54ID0gVFJVRSkKCiMgS29udHJvbGxlIGRlcyBadXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZW5zYXR6ZXMKaGVhZChXVlNfZGF0YSkKYGBgCgojVHJhbnNmb3JtYXRpb24gb2YgaXRlbSByaXNrdGFraW5nCmBgYHtyfQpXVlNfZGF0YSRyaXNrdGFraW5nID0gNiAtIFdWU19kYXRhJHJpc2t0YWtpbmcgKyAxCmBgYAoKIyBSaXNrdGFraW5nIGFzIG9yZGluYWwgdmFyaWFibGUKYGBge3J9CiMgRGVmaW5lIGludGVydmFscyBmb3Igcmlza3Rha2luZwppbnRlcnZhbCA8LSBjdXQoV1ZTX2RhdGEkcmlza3Rha2luZywgYnJlYWtzID0gYygtSW5mLCAxLCAzLCA1LCBJbmYpLCBsYWJlbHMgPSBjKCJWZXJ5IExvdyIsICJMb3ciLCAiTWVkaXVtIiwgIkhpZ2giKSwgaW5jbHVkZS5sb3dlc3QgPSBUUlVFKQoKIyBBZGQgdGhlIG9yZGluYWwgdmFyaWFibGUgIlJpc2t0YWtpbmdfb3JkaW5hbCIgdG8gdGhlIGRhdGEgZnJhbWUKV1ZTX2RhdGEkUmlza3Rha2luZ19vcmRpbmFsIDwtIGFzLmZhY3RvcihpbnRlcnZhbCkKCiMgRGlzcGxheSB0aGUgdXBkYXRlZCBkYXRhIG1hdHJpeApwcmludChXVlNfZGF0YSkKYGBgCgojIFRyYW5zZm9ybSByaXNrIHZhcmlhYmxlIGludG8gVC1zY29yZSAobWVhbiA9IDUwLCBzZCA9IDEwKQpgYGB7cn0KV1ZTX2RhdGEkVF9zY29yZV9yaXNrdGFraW5nID0gMTAqc2NhbGUoV1ZTX2RhdGEkcmlza3Rha2luZywgY2VudGVyPVRSVUUsc2NhbGU9VFJVRSkrNTAKCiNUcmFuc2Zvcm0gcmlzayB2YXJpYWJsZSBpbnRvIFogc2NvcmUgCiMgQXNzdW1pbmcgVC1zY29yZXMgaGF2ZSBhIG1lYW4gb2YgNTAgYW5kIGEgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIDEwCiNXVlNfZGF0YSRaX3Njb3JlX3Jpc2t0YWtpbmcgPSAoV1ZTX2RhdGEkVF9zY29yZV9yaXNrdGFraW5nIC0gNTApIC8gMTAKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCiNwcmludChXVlNfZGF0YSkKCiNXVlNfZGF0YSA8LSBXVlNfZGF0YSAlPiUKIyAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiMgIG11dGF0ZSh6X3Njb3JlX2FnZSA9IHNjYWxlKGFnZSkpCldWU19kYXRhCmBgYAoKCiMgTWl4ZWQtbW9kZWwgV1ZTIC0gUmVwbGljYXRpb24gb2YgTWF0YSBldCBhbC4sIDIwMTYKIyBpbnRlcmNlcHQgb25seSBtb2RlbApgYGB7cn0KbW9kZWwwID0gbG1lcihyaXNrdGFraW5nIH4gMSArICgxfGNvdW50cnkpLGRhdGEgPSBXVlNfZGF0YSkKc3VtbWFyeV9tb2RlbDA9c3VtbWFyeShtb2RlbDApCmBgYAoKIyBhZ2UsIHNleCAKYGBge3J9Cm1vZGVsMSA8LSBsbWVyKHJpc2t0YWtpbmcgfiAxICsgc2NhbGUoYWdlKSArIGZhY3RvcihnZW5kZXIpICsgKDEgKyBzY2FsZShhZ2UpICsgZmFjdG9yKGdlbmRlcikgfCBjb3VudHJ5KSwgCiAgICAgICAgICAgICAgIGRhdGEgPSBXVlNfZGF0YSwgCiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQpzdW1tYXJ5X21vZGVsMT1zdW1tYXJ5KG1vZGVsMSkKcHJpbnQoc3VtbWFyeV9tb2RlbDEpICMgS29lZmZpemllbnRlbsO8YmVyc2ljaHQgZGVzIE1vZGVsbHMgYW56ZWlnZW4KYGBgCgojIFN1bW1hcnkgbW9kZWwxCmBgYHtyfQpzdW1tYXJ5X21vZGVsMSA8LSBzdW1tYXJ5KG1vZGVsMSkKCgojIEdld8O8bnNjaHRlIFdlcnRlIGV4dHJhaGllcmVuIHVuZCBmb3JtYXRpZXJlbgpyZXN1bHRzX21vZGVsMSA8LSBkYXRhLmZyYW1lKAogIFByZWRpY3RvciA9IGMoIkludGVyY2VwdCIsICJBZ2UiLCAiR2VuZGVyIiksCiAgRXN0aW1hdGUgPSBjKHN1bW1hcnlfbW9kZWwxJGNvZWZmaWNpZW50c1siKEludGVyY2VwdCkiLCAiRXN0aW1hdGUiXSwKICAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDEkY29lZmZpY2llbnRzWyJzY2FsZShhZ2UpIiwgIkVzdGltYXRlIl0sCiAgICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwxJGNvZWZmaWNpZW50c1siZmFjdG9yKGdlbmRlcikxIiwgIkVzdGltYXRlIl0pLAogIFNFID0gYyhzdW1tYXJ5X21vZGVsMSRjb2VmZmljaWVudHNbIihJbnRlcmNlcHQpIiwgIlN0ZC4gRXJyb3IiXSwKICAgICAgICAgIHN1bW1hcnlfbW9kZWwxJGNvZWZmaWNpZW50c1sic2NhbGUoYWdlKSIsICJTdGQuIEVycm9yIl0sCiAgICAgICAgICBzdW1tYXJ5X21vZGVsMSRjb2VmZmljaWVudHNbImZhY3RvcihnZW5kZXIpMSIsICJTdGQuIEVycm9yIl0pLAogIFRfc2NvcmUgPSBjKHN1bW1hcnlfbW9kZWwxJGNvZWZmaWNpZW50c1siKEludGVyY2VwdCkiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwxJGNvZWZmaWNpZW50c1sic2NhbGUoYWdlKSIsICJ0IHZhbHVlIl0sCiAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDEkY29lZmZpY2llbnRzWyJmYWN0b3IoZ2VuZGVyKTEiLCAidCB2YWx1ZSJdKSwKICBwX3ZhbHVlID0gYyhzdW1tYXJ5X21vZGVsMSRjb2VmZmljaWVudHNbIihJbnRlcmNlcHQpIiwgIlByKD58dHwpIl0sCiAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDEkY29lZmZpY2llbnRzWyJzY2FsZShhZ2UpIiwgIlByKD58dHwpIl0sCiAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDEkY29lZmZpY2llbnRzWyJmYWN0b3IoZ2VuZGVyKTEiLCAiUHIoPnx0fCkiXSkKKQoKIyBwLVZhbHVlcwpyZXN1bHRzX21vZGVsMSRwX3ZhbHVlIDwtIGlmZWxzZShyZXN1bHRzX21vZGVsMSRwX3ZhbHVlIDwgMC4wMDEsICI8IC4wMDEiLCBzcHJpbnRmKCIlLjNmIiwgcmVzdWx0c19tb2RlbDEkcF92YWx1ZSkpCgpwcmludChyZXN1bHRzX21vZGVsMSkKYGBgCiMgYWdlLCBzZXgsIGFuZCBjb3ZhcmlhdGVzIChjaGlsZHJlbiwgbWFyaXRhbCBzdGF0dXMsIGVtcGxveWVtZW50IHN0YXR1cywgZWR1Y2F0aW9uKQpgYGB7cn0KbW9kZWwyID0gbG1lcihyaXNrdGFraW5nIH4gMStzY2FsZShhZ2UpK2ZhY3RvcihnZW5kZXIpICsgZmFjdG9yKGNoaWxkcmVuKSArIGZhY3RvcihtYXJyaWVkKSArIGZhY3RvcihlbXBsb3llZCkgKyBmYWN0b3IoZWR1Y2F0aW9uKSsgKDErc2NhbGUoYWdlKStmYWN0b3IoZ2VuZGVyKSsgZmFjdG9yKGNoaWxkcmVuKSArIGZhY3RvcihtYXJyaWVkKSArIGZhY3RvcihlbXBsb3llZCkgKyBmYWN0b3IoZWR1Y2F0aW9uKXxjb3VudHJ5KSxkYXRhID0gV1ZTX2RhdGEsY29udHJvbD1sbWVyQ29udHJvbChvcHRDdHJsPWxpc3QobWF4ZnVuPTMwMDAwKSxvcHRpbWl6ZXI9ImJvYnlxYSIpKQpzdW1tYXJ5X21vZGVsMj1zdW1tYXJ5KG1vZGVsMikKCnByaW50KHN1bW1hcnlfbW9kZWwyKSAKYGBgCgojIFN1bW1hcnkgbW9kZWwyCmBgYHtyfQpzdW1tYXJ5X21vZGVsMiA8LSBzdW1tYXJ5KG1vZGVsMikKCiMgR2V3w7xuc2NodGUgV2VydGUgZXh0cmFoaWVyZW4gdW5kIGZvcm1hdGllcmVuCnJlc3VsdHNfbW9kZWwyIDwtIGRhdGEuZnJhbWUoCiAgUHJlZGljdG9yID0gYygiSW50ZXJjZXB0IiwgIkFnZSIsICJHZW5kZXIiLCAiUGFyZW50YWwgc3RhdHVzIiwgIk1hcml0YWwgc3RhdHVzIiwgIk9jY3VwYXRpb25hbCBzdGF0dXMiLCAiRWR1Y2F0aW9uIiksCiAgRXN0aW1hdGUgPSBjKHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siKEludGVyY2VwdCkiLCAiRXN0aW1hdGUiXSwKICAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDIkY29lZmZpY2llbnRzWyJzY2FsZShhZ2UpIiwgIkVzdGltYXRlIl0sCiAgICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGdlbmRlcikxIiwgIkVzdGltYXRlIl0sCiAgICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGNoaWxkcmVuKTEiLCAiRXN0aW1hdGUiXSwKICAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDIkY29lZmZpY2llbnRzWyJmYWN0b3IobWFycmllZCkxIiwgIkVzdGltYXRlIl0sCiAgICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGVtcGxveWVkKTEiLCAiRXN0aW1hdGUiXSwKICAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDIkY29lZmZpY2llbnRzWyJmYWN0b3IoZWR1Y2F0aW9uKTEiLCAiRXN0aW1hdGUiXSksCiAgU0UgPSBjKHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siKEludGVyY2VwdCkiLCAiU3RkLiBFcnJvciJdLAogICAgICAgICAgc3VtbWFyeV9tb2RlbDIkY29lZmZpY2llbnRzWyJzY2FsZShhZ2UpIiwgIlN0ZC4gRXJyb3IiXSwKICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGdlbmRlcikxIiwgIlN0ZC4gRXJyb3IiXSwKICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGNoaWxkcmVuKTEiLCAiU3RkLiBFcnJvciJdLAogICAgICAgICAgc3VtbWFyeV9tb2RlbDIkY29lZmZpY2llbnRzWyJmYWN0b3IobWFycmllZCkxIiwgIlN0ZC4gRXJyb3IiXSwKICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGVtcGxveWVkKTEiLCAiU3RkLiBFcnJvciJdLAogICAgICAgICAgc3VtbWFyeV9tb2RlbDIkY29lZmZpY2llbnRzWyJmYWN0b3IoZWR1Y2F0aW9uKTEiLCAiU3RkLiBFcnJvciJdKSwKICBUX3Njb3JlID0gYyhzdW1tYXJ5X21vZGVsMiRjb2VmZmljaWVudHNbIihJbnRlcmNlcHQpIiwgInQgdmFsdWUiXSwKICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMiRjb2VmZmljaWVudHNbInNjYWxlKGFnZSkiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGdlbmRlcikxIiwgInQgdmFsdWUiXSwKICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMiRjb2VmZmljaWVudHNbImZhY3RvcihjaGlsZHJlbikxIiwgInQgdmFsdWUiXSwKICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMiRjb2VmZmljaWVudHNbImZhY3RvcihtYXJyaWVkKTEiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGVtcGxveWVkKTEiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGVkdWNhdGlvbikxIiwgInQgdmFsdWUiXSksCiAgcF92YWx1ZSA9IGMoc3VtbWFyeV9tb2RlbDIkY29lZmZpY2llbnRzWyIoSW50ZXJjZXB0KSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1sic2NhbGUoYWdlKSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGdlbmRlcikxIiwgIlByKD58dHwpIl0sCiAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDIkY29lZmZpY2llbnRzWyJmYWN0b3IoY2hpbGRyZW4pMSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKG1hcnJpZWQpMSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwyJGNvZWZmaWNpZW50c1siZmFjdG9yKGVtcGxveWVkKTEiLCAiUHIoPnx0fCkiXSwKICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMiRjb2VmZmljaWVudHNbImZhY3RvcihlZHVjYXRpb24pMSIsICJQcig+fHR8KSJdKQopCgojIHAtVmFsdWVzCnJlc3VsdHNfbW9kZWwyJHBfdmFsdWUgPC0gaWZlbHNlKHJlc3VsdHNfbW9kZWwyJHBfdmFsdWUgPCAwLjAwMSwgIjwgLjAwMSIsIHNwcmludGYoIiUuM2YiLCByZXN1bHRzX21vZGVsMiRwX3ZhbHVlKSkKCnByaW50KHJlc3VsdHNfbW9kZWwyKQpgYGAKCmBgYHtyfQptb2RlbDMgPC0gbG1lcihyaXNrdGFraW5nIH4gMStzY2FsZShhZ2UpKmhhcmRzaGlwK2ZhY3RvcihnZW5kZXIpKmhhcmRzaGlwICsgZmFjdG9yKGNoaWxkcmVuKSArIGZhY3RvcihtYXJyaWVkKSArIGZhY3RvcihlbXBsb3llZCkgKyBmYWN0b3IoZWR1Y2F0aW9uKSsgKDErc2NhbGUoYWdlKStmYWN0b3IoZ2VuZGVyKSsgZmFjdG9yKGNoaWxkcmVuKSArIGZhY3RvcihtYXJyaWVkKSArIGZhY3RvcihlbXBsb3llZCkgKyBmYWN0b3IoZWR1Y2F0aW9uKXxjb3VudHJ5KSxkYXRhID0gV1ZTX2RhdGEsY29udHJvbD1sbWVyQ29udHJvbChvcHRDdHJsPWxpc3QobWF4ZnVuPTMwMDAwKSxvcHRpbWl6ZXI9ImJvYnlxYSIpLFJFTUwgPSBGQUxTRSkKc3VtbWFyeV9tb2RlbDM9c3VtbWFyeShtb2RlbDMpCgpwcmludChzdW1tYXJ5X21vZGVsMykKYGBgCgojIFN1bW1hcnkgbW9kZWwzCmBgYHtyfQojIFp1c2FtbWVuZmFzc3VuZyBkZXMgTW9kZWxscyBhbnplaWdlbgpzdW1tYXJ5X21vZGVsMyA8LSBzdW1tYXJ5KG1vZGVsMykKCiMgR2V3w7xuc2NodGUgV2VydGUgZXh0cmFoaWVyZW4gdW5kIGZvcm1hdGllcmVuCnJlc3VsdHNfbW9kZWwzIDwtIGRhdGEuZnJhbWUoCiAgUHJlZGljdG9yID0gYygiSW50ZXJjZXB0IiwgIkFnZSIsICJHZW5kZXIiLCAiUGFyZW50YWwgc3RhdHVzIiwgIk1hcml0YWwgc3RhdHVzIiwgIk9jY3VwYXRpb25hbCBzdGF0dXMiLCAiRWR1Y2F0aW9uIiwgIkhhcmRzaGlwIiwgIkludGVyYWN0aW9uOiBHZW5kZXIgKiBIYXJkc2hpcCIpLAogIEVzdGltYXRlID0gYyhzdW1tYXJ5X21vZGVsMyRjb2VmZmljaWVudHNbIihJbnRlcmNlcHQpIiwgIkVzdGltYXRlIl0sCiAgICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1sic2NhbGUoYWdlKSIsICJFc3RpbWF0ZSJdLAogICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMyRjb2VmZmljaWVudHNbImZhY3RvcihnZW5kZXIpMSIsICJFc3RpbWF0ZSJdLAogICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMyRjb2VmZmljaWVudHNbImZhY3RvcihjaGlsZHJlbikxIiwgIkVzdGltYXRlIl0sCiAgICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKG1hcnJpZWQpMSIsICJFc3RpbWF0ZSJdLAogICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMyRjb2VmZmljaWVudHNbImZhY3RvcihlbXBsb3llZCkxIiwgIkVzdGltYXRlIl0sCiAgICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKGVkdWNhdGlvbikxIiwgIkVzdGltYXRlIl0sCiAgICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siaGFyZHNoaXAiLCAiRXN0aW1hdGUiXSwKICAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJoYXJkc2hpcDpmYWN0b3IoZ2VuZGVyKTEiLCAiRXN0aW1hdGUiXSksCiAgU0UgPSBjKHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siKEludGVyY2VwdCkiLCAiU3RkLiBFcnJvciJdLAogICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJzY2FsZShhZ2UpIiwgIlN0ZC4gRXJyb3IiXSwKICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKGdlbmRlcikxIiwgIlN0ZC4gRXJyb3IiXSwKICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKGNoaWxkcmVuKTEiLCAiU3RkLiBFcnJvciJdLAogICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJmYWN0b3IobWFycmllZCkxIiwgIlN0ZC4gRXJyb3IiXSwKICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKGVtcGxveWVkKTEiLCAiU3RkLiBFcnJvciJdLAogICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJmYWN0b3IoZWR1Y2F0aW9uKTEiLCAiU3RkLiBFcnJvciJdLAogICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJoYXJkc2hpcCIsICJTdGQuIEVycm9yIl0sCiAgICAgICAgICBzdW1tYXJ5X21vZGVsMyRjb2VmZmljaWVudHNbImhhcmRzaGlwOmZhY3RvcihnZW5kZXIpMSIsICJTdGQuIEVycm9yIl0pLAogIFRfc2NvcmUgPSBjKHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siKEludGVyY2VwdCkiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1sic2NhbGUoYWdlKSIsICJ0IHZhbHVlIl0sCiAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJmYWN0b3IoZ2VuZGVyKTEiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKGNoaWxkcmVuKTEiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKG1hcnJpZWQpMSIsICJ0IHZhbHVlIl0sCiAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJmYWN0b3IoZW1wbG95ZWQpMSIsICJ0IHZhbHVlIl0sCiAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJmYWN0b3IoZWR1Y2F0aW9uKTEiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siaGFyZHNoaXAiLCAidCB2YWx1ZSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siaGFyZHNoaXA6ZmFjdG9yKGdlbmRlcikxIiwgInQgdmFsdWUiXSksCiAgcF92YWx1ZSA9IGMoc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyIoSW50ZXJjZXB0KSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1sic2NhbGUoYWdlKSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKGdlbmRlcikxIiwgIlByKD58dHwpIl0sCiAgICAgICAgICAgICAgc3VtbWFyeV9tb2RlbDMkY29lZmZpY2llbnRzWyJmYWN0b3IoY2hpbGRyZW4pMSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKG1hcnJpZWQpMSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siZmFjdG9yKGVtcGxveWVkKTEiLCAiUHIoPnx0fCkiXSwKICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMyRjb2VmZmljaWVudHNbImZhY3RvcihlZHVjYXRpb24pMSIsICJQcig+fHR8KSJdLAogICAgICAgICAgICAgIHN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1siaGFyZHNoaXAiLCAiUHIoPnx0fCkiXSwKICAgICAgICAgICAgICBzdW1tYXJ5X21vZGVsMyRjb2VmZmljaWVudHNbImhhcmRzaGlwOmZhY3RvcihnZW5kZXIpMSIsICJQcig+fHR8KSJdKQopCgojIEZvcm1hdGllcnVuZyBkZXIgcC1XZXJ0ZQpyZXN1bHRzX21vZGVsMyRwX3ZhbHVlIDwtIGlmZWxzZShyZXN1bHRzX21vZGVsMyRwX3ZhbHVlIDwgMC4wMDEsICI8IC4wMDEiLCBzcHJpbnRmKCIlLjNmIiwgcmVzdWx0c19tb2RlbDMkcF92YWx1ZSkpCgojIEVyZ2Vibmlzc2UgYW56ZWlnZW4KcHJpbnQocmVzdWx0c19tb2RlbDMpCmBgYAoKCiMgQU5PVkEKYGBge3J9CmFub3ZhKG1vZGVsMCxtb2RlbDEpCmFub3ZhKG1vZGVsMSxtb2RlbDIpCmFub3ZhKG1vZGVsMixtb2RlbDMpIApgYGAKCmBgYHtyfQpXVlNfZGF0YQpgYGAKCgpgYGB7cn0KY29lZnNhbGxtb2RlbHM9cmJpbmQoc3VtbWFyeV9tb2RlbDEkY29lZmZpY2llbnRzLApzdW1tYXJ5X21vZGVsMiRjb2VmZmljaWVudHMsCnN1bW1hcnlfbW9kZWwzJGNvZWZmaWNpZW50c1tjKDE6Miw0OjgsMyw5OjEwKSxdKQoKd3JpdGUuY3N2KGNvZWZzYWxsbW9kZWxzLCJjb2Vmc2FsbG1vZGVscy5jc3YiKQpgYGAKCiMgRGVsZXRlIHdoZW4gc3VibWl0dGluZyB0aGUgY29kZSAtLT4ganVzdCBmb3IgbWUgdG8ga25vdyB3aGVyZSB0aGUgZG9jdW1lbnQgaXMKYGBge3J9CmZpbGVfcGF0aCA8LSBmaWxlLnBhdGgoZ2V0d2QoKSwgImNvZWZzYWxsbW9kZWxzLmNzdiIpCmZpbGVfcGF0aApgYGAKCmBgYHtyfQojIEV4dHJhaGllcmVuIGRlciBLb2VmZml6aWVudGVuLVRhYmVsbGUgZsO8ciBqZWRlcyBNb2RlbGwKY29lZmZpY2llbnRzX21vZGVsMCA8LSBzdW1tYXJ5KG1vZGVsMCkkY29lZmZpY2llbnRzCmNvZWZmaWNpZW50c19tb2RlbDEgPC0gc3VtbWFyeShtb2RlbDEpJGNvZWZmaWNpZW50cwpjb2VmZmljaWVudHNfbW9kZWwyIDwtIHN1bW1hcnkobW9kZWwyKSRjb2VmZmljaWVudHMKY29lZmZpY2llbnRzX21vZGVsMyA8LSBzdW1tYXJ5KG1vZGVsMykkY29lZmZpY2llbnRzCgojIEZpbHRlcm4gZGVyIGVyZm9yZGVybGljaGVuIFplaWxlbiBhdXMgZGVuIEtvZWZmaXppZW50ZW4KY29lZmZpY2llbnRzX21vZGVsMCA8LSBjb2VmZmljaWVudHNfbW9kZWwwW3Jvd25hbWVzKGNvZWZmaWNpZW50c19tb2RlbDApICVpbiUgYygiKEludGVyY2VwdCkiLCAic2NhbGUoel9zY29yZV9hZ2UpIiwgImZhY3RvcihnZW5kZXIpIiksIF0KY29lZmZpY2llbnRzX21vZGVsMSA8LSBjb2VmZmljaWVudHNfbW9kZWwxW3Jvd25hbWVzKGNvZWZmaWNpZW50c19tb2RlbDEpICVpbiUgYygiKEludGVyY2VwdCkiLCAic2NhbGUoel9zY29yZV9hZ2UpIiwgImZhY3RvcihnZW5kZXIpIiksIF0KY29lZmZpY2llbnRzX21vZGVsMiA8LSBjb2VmZmljaWVudHNfbW9kZWwyW3Jvd25hbWVzKGNvZWZmaWNpZW50c19tb2RlbDIpICVpbiUgYygiKEludGVyY2VwdCkiLCAic2NhbGUoel9zY29yZV9hZ2UpIiwgImZhY3RvcihnZW5kZXIpIiwgImZhY3RvcihjaGlsZHJlbikiLCAiZmFjdG9yKG1hcnJpZWQpIiwgImZhY3RvcihlbXBsb3llZCkiLCAiZmFjdG9yKGVkdWNhdGlvbikiKSwgXQpjb2VmZmljaWVudHNfbW9kZWwzIDwtIGNvZWZmaWNpZW50c19tb2RlbDNbcm93bmFtZXMoY29lZmZpY2llbnRzX21vZGVsMykgJWluJSBjKCIoSW50ZXJjZXB0KSIsICJzY2FsZSh6X3Njb3JlX2FnZSkiLCAiZmFjdG9yKGdlbmRlcikiLCAiZmFjdG9yKGNoaWxkcmVuKSIsICJmYWN0b3IobWFycmllZCkiLCAiZmFjdG9yKGVtcGxveWVkKSIsICJmYWN0b3IoZWR1Y2F0aW9uKSIsICJoYXJkc2hpcCIsICJzY2FsZSh6X3Njb3JlX2FnZSk6aGFyZHNoaXAiLCAiZmFjdG9yKGdlbmRlcik6aGFyZHNoaXAiKSwgXQoKIyBadXNhbW1lbmbDvGhyZW4gZGVyIGdlc2Now6R0enRlbiBLb2VmZml6aWVudGVuIGF1cyBhbGxlbiBNb2RlbGxlbgpjb2Vmc19hbGxfbW9kZWxzIDwtIHJiaW5kKGNvZWZmaWNpZW50c19tb2RlbDAsIGNvZWZmaWNpZW50c19tb2RlbDEsIGNvZWZmaWNpZW50c19tb2RlbDIsIGNvZWZmaWNpZW50c19tb2RlbDMpCgojIEVyc3RlbGxlbiBlaW5lciBUYWJlbGxlIGF1cyBkZW4gS29lZmZpemllbnRlbgpyZXN1bHRzX3RhYmxlIDwtIGRhdGEuZnJhbWUoCiAgUHJlZGljdG9yID0gcm93bmFtZXMoY29lZnNfYWxsX21vZGVscyksCiAgYiA9IGNvZWZzX2FsbF9tb2RlbHNbLCAiRXN0aW1hdGUiXSwKICBTRSA9IGNvZWZzX2FsbF9tb2RlbHNbLCAiU3RkLiBFcnJvciJdLAogIFRfc2NvcmUgPSBjb2Vmc19hbGxfbW9kZWxzWywgInQgdmFsdWUiXSwKICBwX3ZhbHVlID0gY29lZnNfYWxsX21vZGVsc1ssICJQcig+fHR8KSJdCikKCiMgRHJ1Y2tlbiBkZXIgRXJnZWJuaXN0YWJlbGxlCnJlc3VsdHNfdGFibGUKYGBgCgoKCg==